<?php
if(!function_exists('debug'))
{
    function debug($val,$type=0){
        echo "<pre>"; 
        if(is_array($val) || is_object($val)){
            switch($type) {
                case 1: var_dump($val);break;
                default: print_r($val);break;
            }
        } else var_dump($val);
        echo "</pre>"; 
    }
}

if(!function_exists('xdebug'))
{
    function xdebug(&$item,$displayed_levels=1,$current_level=0) 
    {
        if($current_level == 0) {?>
        <script src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js' type='text/javascript'></script>
        <script>
            $(document).ready(function(){
                $("li a").click(function(){
                    $(this).siblings("ol").is(":hidden") ? $(this).siblings("ol").show() : $(this).siblings("ol").hide();
                })
                $("#show-all").click(function(){
                    $("ol").show();
                })
                $("#hide-all").click(function(){
                    $("ol").each(function(){
                        if(!$(this).hasClass("always-show")) $(this).hide();
                    })
                })
            })
        </script>
        <?}
        if(empty($item)) return NULL;
        if(is_array($item) || is_object($item)) 
        {
            switch(TRUE) {
                case is_array($item): $var_type = "Array";break;
                case is_object($item): $var_type = "Object";break;
            }
            if($current_level > 0) echo "[<a href='javascript:;'>{$var_type}</a>]: \n";
            else echo "<a href='javascript:;' id='show-all'>[SHOW ALL]</a> | <a href='javascript:;' id='hide-all'>[HIDE ALL]</a> <br />\n";
            echo "<ol title={$var_type} style='display:".($current_level<$displayed_levels?'block':'none')."' class='".($current_level<$displayed_levels?"always-show":"")."'>\n";
            foreach($item as $key => &$value) 
            {
                echo "<li><font color='#339933'>".$key."</font>: ";
                if(is_array(&$value)) ksort(&$value);
                echo $this->xdebug(&$value,$displayed_levels,$current_level+1);
                echo "</li>\n";
            }
            echo "</ol>\n";
        }
        else
        {
            is_bool($item) || is_null($item)? var_dump($item) : print $item;
        }
    }
}
